// app.js
import localConfigs from "./utils/config";
import fetch from "./utils/fetch"
import {gotoLogin} from "./utils/util";
App({
  onLaunch() {
    wx.getSystemInfo({
      success: e => {
        this.globalData.StatusBar = e.statusBarHeight;
        let custom = wx.getMenuButtonBoundingClientRect();
        this.globalData.Custom = custom;
        this.globalData.CustomBar = custom.bottom + custom.top - e.statusBarHeight;
      }
    })
    // 检查是否登录
    fetch("/users/check").then(res => {
      // 已登录，获取用户信息
      if (res.data.isLogin) {
        this.globalData.isLogin = true;
        this.globalData.userInfo = wx.getStorageSync('userInfo');
        // 利用session_key判断用户登录是否过期
        wx.checkSession({
          // 登录未过期
          success(res) {
          },
          fail() {
            //session_key过期，重新登录
            wx.login({
              success: (res) => {
                fetch(`/users/login?js_code=${res.code}`).then(res => {
                  const {
                    user,
                    token
                  } = res.data;
                  wx.setStorageSync('userInfo', user); 
                  wx.setStorageSync('token', token);
                  this.globalData.userInfo = user;
                  this.globalData.token = token;
                })
              },
            })
          }
        })
      } else {
        // 未登录，跳转到注册页面
        gotoLogin();
      }
    }).catch(err => {
      this.onLaunch();
    })
  },
  globalData: {
    isLogin: false, // 用户是否登录
    token: '', // 服务器返回的token
    userInfo: null // 存放用户信息
  },
  // 获取配置
  getConfig(key = "") {
    // 不指定key，返回全部
    if (key === "") {
      return localConfigs;
    }
    // 不存在配置
    if (!localConfigs[key]) {
      console.warn(`${key} config is not exist`);
      return undefined;
    }
    // 配置是否区分环境
    if (typeof localConfigs[key] === 'object' && typeof localConfigs[key] !== null) {
      // 获取环境
      const env = this.getConfig("env");
      return localConfigs[key][env];
    }
    // 不区分环境，直接返回
    return localConfigs[key];
  }
})